import os
import logging

# 获取项目根目录路径
App_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
PROJECT_ROOT = os.path.abspath(os.path.join(App_ROOT, os.pardir))
BASE_DIR = os.path.abspath(os.path.join(PROJECT_ROOT, os.pardir))

# 确保日志目录存在
LOG_DIR = os.path.join(BASE_DIR, "logger")
if not os.path.exists(LOG_DIR):
    os.makedirs(LOG_DIR)

# 日志格式
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

# 创建统一的日志配置函数
def get_logger(name, log_file=None, file_level=logging.WARNING, console_level=logging.WARNING):
    """
    获取统一配置的logger实例

    参数:
        name: logger名称
        log_file: 日志文件名，如为None则只输出到控制台
        file_level: 文件日志级别
        console_level: 控制台日志级别

    返回:
        配置好的logger实例
    """
    # 创建logger
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)  # 设置最低级别为DEBUG，便于各个handler控制自己的级别

    # 避免重复添加handler
    if logger.handlers:
        return logger

    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(console_level)
    console_handler.setFormatter(logging.Formatter(LOG_FORMAT))
    logger.addHandler(console_handler)

    # 创建文件处理器
    if log_file:
        file_path = os.path.join(LOG_DIR, log_file)
        file_handler = logging.FileHandler(file_path)
        file_handler.setLevel(file_level)
        file_handler.setFormatter(logging.Formatter(LOG_FORMAT))
        logger.addHandler(file_handler)

    return logger

# 为各个模块提供预配置的logger
def get_udp_logger():
    return get_logger("udp_logger", "UDP_logger.log", logging.WARNING, logging.WARNING)

def get_simulation_logger():
    return get_logger("simulation_logger", "simulation_logger.log", logging.INFO, logging.INFO)

def get_audit_logger():
    return get_logger("audit_logger", "audit_logger.log", logging.INFO, logging.INFO)

def get_test_logger():
    return get_logger("test_logger", "test_logger.log", logging.DEBUG, logging.DEBUG)
